package com.yuesystem.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuesystem.dto.BlogFront;
import com.yuesystem.dto.responsebody.BlogCheckResponseBody;
import com.yuesystem.dto.responsebody.BlogDetailResponseBody;
import com.yuesystem.dto.responsebody.BlogResponseBody;
import com.yuesystem.dto.responsebody.CollectBlogResponseBody;
import com.yuesystem.dto.responsebody.CommentResponseBody;
import com.yuesystem.dto.responsebody.LikeResponseBody;
import com.yuesystem.entity.Blog;
import com.yuesystem.entity.CollectBlog;

import java.util.List;

/**
 * 帖子接口.
 */
public interface BlogService extends IService<Blog> {
  /**
   * 发布帖子.
   *
   * @param blog 帖子类
   */
  void saveBlog(Blog blog);
  
  /**
   * 分页查询帖子(首页).
   *
   * @param blogFront 前台帖子类
   * @return 帖子响应类
   */
  Page<BlogResponseBody> getPage(BlogFront blogFront);
  
  /**
   * 查询单条帖子（首页）.
   *
   * @param blogId 帖子id
   * @return 帖子响应类
   */
  BlogResponseBody blogOne(Long blogId);
  
  /**
   * 分页查看（我的发布）.
   *
   * @param page      起始页
   * @param pageSize  页数
   * @param startTime 起始时间
   * @param endTime   结束时间
   * @return 帖子响应类分页
   */
  Page<BlogResponseBody> getPageMyBlog(int page, int pageSize, String startTime, String endTime);
  
  /**
   * 分页查看我的收藏.
   *
   * @param page      起始页
   * @param pageSize  页数
   * @param startTime 起始时间
   * @param endTime   结束时间
   * @return 收藏帖子响应类分页
   */
  Page<CollectBlogResponseBody> getPageMyCollect(
      int page, int pageSize, String startTime, String endTime);
  
  
  /**
   * 分页查看别人对我的帖子的收藏.
   *
   * @param page     起始页
   * @param pageSize 页数
   * @return 收藏帖子响应类分页
   */
  Page<CollectBlogResponseBody> getPageCollectMy(int page, int pageSize);
  
  /**
   * 分页查看别人对我的帖子的点赞.
   *
   * @param page     起始页
   * @param pageSize 页数
   * @return 点赞响应类分页
   */
  Page<LikeResponseBody> getPageLikeMy(int page, int pageSize);
  
  /**
   * 分页查看别人对我的帖子的评论.
   *
   * @param page     起始页
   * @param pageSize 页数
   * @return 评论响应类分页
   */
  Page<CommentResponseBody> getPageCommentMy(int page, int pageSize);
  
  /**
   * 根据用户id删除该用户所有的发帖.
   *
   * @param userId 用户id
   */
  void deleteById(Long userId);
  
  /**
   * 根据帖子id,返回所有的以及一级评论和二级评论.
   *
   * @param blogId 帖子id
   * @return 评论响应类分页
   */
  List<CommentResponseBody> getComment(Long blogId);
  
  /**
   * 获取未审核帖子列表.
   *
   * @param page     起始页
   * @param pageSize 页数
   * @return 审核帖子响应类分页
   */
  Page<BlogCheckResponseBody> getCheckPage(int page, int pageSize);
  
  /**
   * 获取审核界面的帖子详细内容.
   *
   * @param id 帖子id
   * @return 审核帖子详细内容响应类分页
   */
  BlogDetailResponseBody getBlogDetail(int id);
  
  /**
   * 允许发布.
   *
   * @param id 帖子id
   */
  void allowed(int id);
  
  /**
   * 禁止发布.
   *
   * @param id 帖子id
   */
  void refused(int id);
  
  /**
   * 根据分类返回下标.
   */
  int help1(String type);
  
  /**
   * 根据全部类别返回列表.
   */
  List<Integer> help2(String type0, String type1, String type2, String type3);
  
  /**
   * 根据下标返回类型.
   */
  String help3(String type);
  
  /**
   * 根据选择返回我的发布的queryWrapper.
   */
  LambdaQueryWrapper<Blog> help4(Long userId, String startTime, String endTime);
  
  /**
   * 根据选择返回我的收藏的queryWrapper.
   */
  LambdaQueryWrapper<CollectBlog> help5(Long userId, String startTime, String endTime);
  
}
